<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>JMX et JConsole</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>jmx,jconsole,Java,R�seau,jmx,et,jconsole,articles,4,4,certification,sun,java,solaris,articles,essentiels,tips,astuces,codes,exemple,tutorial,developpement,jsp,servlet,jdbc,jdo,j2se,j2ee,laboratoire</keywords>
        <keywords />
        <author>Gilles DE MATOS</author>
    </head>
    <body>
        <div class="chapter">
            <h2>Introduction</h2>
            <p>Java Management eXtension (JMX) est une API d’administration d’applications Java qui est établie selon le même
				modèle que le protocole SNMP, permettant une administration distante des applications. L’évolution de ces applications Java
				rend leurs environnements dynamiques et imprévisibles. Il est donc de moins en moins évident de gérer ces applications par des
				solutions statiques. La spécification JMX fait alors son apparition dans l’environnement de programmation Java pour que tout composant
				Java puisse être géré, à distance ou non, de manière dynamique.</p>
            <p>L’API JMX permet donc une gestion du fonctionnement d’une application Java en cours d’exécution. Cette API est
				intégrée dans le JDK depuis la version 1.5.0 et propose une méthode afin d’améliorer de manière dynamique
				les objets Java avec des opérations et des attributs de gestion. Cette méthode, appelée « instrumentation »,
				permet aux développeurs de s’investir sur leurs applications sans devoir utiliser une API de gestion.</p>
            <br />
            <div class="subChapter">
                <h3>Instrumentation</h3>
                <p>L’instrumentation des ressources se fait au moyen de composants Java appelés « MBean » (Manageable
					Bean). Ces MBeans permettent de lire et de modifier la configuration des applications Java dynamiquement. C'est-à-dire qu’ils
					permettent de stopper, redémarrer, ajouter ou encore retirer un composant Java à une application en cours d’exécution.
					Ils permettent également de notifier des événements, en implémentant l’interface NotificationBroadcaster,
					de générer des statistiques sur son fonctionnement puis de les rendre disponibles. Ces Mbeans sont capables de repérer
					les dysfonctionnements qui peuvent survenir lors de manipulations de configurations.</p>
            </div>
            <br />
            <div class="subChapter">
                <h3>Niveaux</h3>
                <p>JMX se décompose en trois niveaux :</p>
                <p />
                <ul>
                    <li>Le niveau instrumentation : les MBeans</li>
                </ul>
                Les Mbeans constituent des interfaces de communication avec les programmes gérés à travers JMX. Ce sont des
				classes Java s’inspirant des JavaBeans. C'est-à-dire que ce sont des classes pour lesquels un certain nombre de propriétés
				peuvent être vues à distance à travers des interfaces spécifiées.
                <p>Il existe plusieurs types de MBeans. Le MBean standard fournit des propriétés pendant l’exécution d’une
					application Java et possède une interface définie statiquement tandis que les MBeans dynamiques - disponibles en implémentant
					l’interface DynamicMBean - ont des propriétés évolutives pendant l’exécution d’une application.
					Ceux-ci permettent d’afficher dynamiquement leurs attributs et leurs opérations.</p>
                <p />
                <ul>
                    <li>Le niveau Serveur : le MBeanServer</li>
                </ul>
                Le MBeanServer permet de gérer les MBeans, il examine leurs états puis exécute des opérations sur ceux-ci.
				Il permet également de fournir des adaptateurs de protocoles permettant d’accéder à cette ressource depuis des
				clients, tel que HTML.
                <p />
                <ul>
                    <li>Le niveau Distribution</li>
                </ul>
                Il permet d’interfacer avec le MBeanServer via une console distante. Il s’agit de connecteurs de protocoles permettant aux
				MBeans de communiquer avec un protocole donné (HTMP, HTTP, SNMP, etc.). Par défaut, une connexion HTML est telle que l’on
				dispose d’un accès à l’administration d’une application depuis un navigateur internet. La console JMX JConsole
				permet de se connecter aux services de distribution. Cet outil de monitoring permet de fournir des informations, via une console graphique, sur les performances
				et la consommation de ressources des applications Java s’exécutant sur la JVM. JConsole est un outil fourni avec le JDK 1.5.0.
            </div>
        </div>
        <div class="chapter">
            <h2>Utilisation de JConsole</h2>
            <p>Lancez votre application Java en ajoutant la commande com.sun.management.jmxremote :</p>
            <ul>
                <li>
                    <i>java –Dcom.sun.management.jmxremote -jar hello.jar</i>
                </li>
            </ul>
            <img src="./images/Article JMX_html_m71904c2e.jpg" />
            <br clear="left" />
            <br />
            <p>
                Lancez ensuite JConsole. Vous le trouverez dans le répertoire \bin de votre JDK. Tout d’abord, vous devez vous connecter en
				local ou à distance via la fenêtre Connect to Agent. Une fois connecté, elle vous informe des applications Java en
				cours d’exécution. Sélectionnez votre application dans la liste pour obtenir les informations correspondantes.
                <img src="./images/Connection.jpg" />
                <br clear="left" />
            </p>
            <br />
            <p>
                La fenêtre Monitoring and Management Console s’ouvre alors sur l’onglet Overview qui  joue le rôle de sommaire pour JConsole et regroupe des
				informations sur les processus en cours d’exécution et la mémoire physique utilisée, le processeur ainsi que sur les classes lancées.
                <img src="./images/Overview.jpg" />
                <br clear="left" />
            </p>
            <br />
            <p>L’onglet Memory fournit les informations sur la mémoire physique utilisée. Le graphe renseigne sur la mémoire
				utilisée par la Machine Virtuelle. Il nous fournit différentes vues qui nous informent des différents pools de mémoire
				utilisés par JVM :</p>
            <ul>
                <li>Eden Space : Le pool dont la mémoire est initialement allouée pour les objets.</li>
                <li>Survivor Space : Le pool contenant les objets en dehors de l’Eden Space.</li>
                <li>Tenured Generation : Le pool contenant les objets éphémères du pool Survivor Space.</li>
                <li>Permanent Generation : Le pool contenant toutes les données relatives à la Machine Virtuelle.</li>
                <li>Code Cache : Le pool contenant la mémoire utilisée pour la compilation et le stockage du code source.</li>
            </ul>
            <img src="./images/Memory.jpg" />
            <br clear="left" />
            <p>Le diagramme de droite nous renseigne sur la mémoire utilisée dans les différents pools. Celui-ci devient rouge lorsque la
				mémoire utilisée dépasse le seuil d’utilisation de la mémoire totale. Vous pouvez définir le seuil de
				la mémoire avec l’attribut MemoryMXBean.</p>
            <br />
            <p>L’onglet Threads fournit les informations sur les processus en cours d’utilisation. La liste de gauche renseigne sur les
				processus actifs. Le champ Filter permet de restreindre cette liste aux processus souhaité. Il agit comme un filtre sur les
				processus actifs. Ce champ respecte la casse.</p>
            <p>
                Pour afficher les informations à propos d’un thread, il suffit de cliquer sur son nom dans la liste. Le graphe nous informe
				sur le nombre de processus actifs ainsi que sur la durée de leur exécution. La courbe rouge sur le nombre maximum de
				processus fils et la bleu sur le nombre de processus actifs.
                <img src="./images/Threads.jpg" />
                <br clear="left" />
            </p>
            <br />
            <p>
                L’onglet Classes contient les informations sur les classes lancées. Le graphe nous informe sur le nombre de classes
				lancées. La courbe rouge renseigne sur le nombre total de classe en incluant celle en attente d’exécution, la bleu
				sur le nombre courant de classes lancées. La section de détail informe sur le nombre de classes chargées depuis le lancement
				de la Machine Virtuelle ainsi que sur le nombre courant de classes en cours d’exécution.
                <img src="./images/Classes.jpg" />
                <br clear="left" />
            </p>
            <br />
            <p>L’onglet VM Summary fournit les informations de la Machine Virtuelle telles que la version de la VM (Virtual Machine), le temps
				écoulé depuis le lancement de celle-ci (Uptime), les arguments ajoutés au programme lors du lancement de celui-ci
				(VM arguments), les jars associés à l’application (Class path), les librairies également associés à
				l’application (Library path).</p>
            <p>
                L’onglet VM Summary fournit des informations, relatives au compilateur, telles que le temps total accumulé lors de la compilation
				(Total Compile Time).Il fournit également des informations sur votre système telles que le système d’exploitation
				(Operating System), le nombre de processeur (Number of processors), le temps processeur (Process CPU time), la mémoire physique
				totale et libre (Total / Free physical memory).
                <img src="./images/VM Summary.jpg" />
                <br clear="left" />
            </p>
            <br />
            <p>
                L’onglet MBeans affiche toutes les informations relatives aux MBeans enregistrés auprès du MBeanServer. L’arbre
				de gauche renseigne sur tous les MBeans. Ils sont organisés selon les objets qui les implémentent. Pour afficher les attributs,
				les opérations, les notifications ou les informations relatives à un MBean, il suffit de sélectionner le MBean dans la liste.
				Si un attribut est modifiable, vous pouvez en définir sa valeur.
                <img src="./images/MBeans_Operations.jpg" />
                <br clear="left" />
                <img src="./images/MBeans_Attributes.jpg" />
                <br clear="left" />
            </p>
        </div>
        <div class="chapter">
            <h2 />
            <p>Pour plus de renseignements sur l’API JMX et sur l’outil de monitoring JConsole, visitez les liens suivants :</p>
            <ul>
                <li>
                    <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jmx/spec.html" target="�_blank�">la documentation SUN de JMX</a>
                    .
                </li>
                <li>
                    <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jmx/tutorial/tutorialTOC.html" target="�_blank�">le tutorial SUN de JMX</a>
                    .
                </li>
                <li>
                    <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples.html" target="�_blank�">les exemples SUN de JMX</a>
                    .
                </li>
                <li>
                    <a href="http://java.sun.com/j2se/1.5/docs/guide/management/jconsole.html" target="�_blank�">la documentation SUN de JConsole</a>
                    .
                </li>
                <li>
                    <a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html" target="�_blank�">le tutorial SUN de JConsole</a>
                    .
                </li>
            </ul>
        </div>
    </body>
</html>

